package cn.xiaolang.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 密码强度校验
 *
 * @author fuhw/Dean
 * @date 2019-10-11
 */
public class PasswordCheckUtils {

    public static Object passwordLevel(String password) {
        //低强度 弱密码
        String regEx0 = "(?:\\d+|[a-zA-Z]+|[!@#$%^&*]+){6,7}";
        //中等强度 中等密码
        String regEx1 = "^(?![a-zA-z]+$)(?!\\d+$)(?![!@#$%^&*]+$)[a-zA-Z\\d!@#$%^&*]{8,9}$";
        //高强度 复杂密码 必须包括大写字母、小写字母、数字和特殊符号至少三种，密码长度至少为10位
        String regEx2 = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_]+$)(?![a-z0-9]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{10,}$";
        Pattern pattern0 = Pattern.compile(regEx0);
        Pattern pattern1 = Pattern.compile(regEx1);
        Pattern pattern2 = Pattern.compile(regEx2);
        Matcher matcher0 = pattern0.matcher(password);
        Matcher matcher1 = pattern1.matcher(password);
        Matcher matcher2 = pattern2.matcher(password);
        boolean rs0 = matcher0.matches();
        boolean rs1 = matcher1.matches();
        boolean rs2 = matcher2.matches();
        if (rs2) {
            return "密码强度正常";
        }
        if (rs1) {
            return "密码强度一般,必须包括大写字母、小写字母、数字和特殊符号至少三种，密码长度至少为10位";
        }
        if (rs0) {
            return "密码强度较弱,必须包括大写字母、小写字母、数字和特殊符号至少三种，密码长度至少为10位";
        } else {
            return "密码强度很弱,必须包括大写字母、小写字母、数字和特殊符号至少三种，密码长度至少为10位";
        }
    }


    public static void main(String[] args) {
//        try {
//            System.out.println(passwordLevel("15221245168"));
//            System.out.println(passwordLevel("wanghaipeng@aikucun.com"));
//            System.out.println(passwordLevel("1234quiWEY"));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }

        System.out.println(5>>>16);
    }
}
